package com.sanploy.common.util;



import com.sanploy.common.enums.Transport;

import java.lang.reflect.Field;

/**
 * 此对象用于为指定对象以及类自动赋值.
 */
public class DynamicUtil {

    /**
     * 通过对象参数名把值动态注入到对象中
     */
    public static void dynamicInjectValue(Object obj,String name,String value){
        try {
        Field[] fields = obj.getClass().getDeclaredFields();
        for (Field field:fields){
            if (name.equals(field.getName())){
                field.setAccessible(true);
                    field.set(obj,matchFiledType(field,value));
            }
        }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

    /**
     * 当参数类型不是String时参数强制转化成int或者Long类型
     * @param field
     * @param str
     * @return
     */
    private static Object matchFiledType(Field field,String str){
        Object value = null;
        if (field.getType().getName().contains("Long")){
            value = Long.decode(str);
        }else if (field.getType().getName().contains("int")){
            value = Integer.decode(str);
        }else if (field.getType().getName().contains("double")){
            value = Double.valueOf(str);
        }else if (field.getType().getName().contains("Transport")){  //每为数据库实体类添加枚举字段需在此添加相应的枚举配置
            value = Transport.valueOf(str);
        }else{
            value = str;
        }
        return value;
    }


}
